package com.wang.jmonkey.modules.system.api;

import com.wang.jmonkey.common.annotation.Log;
import com.wang.jmonkey.common.result.HttpPageResult;
import com.wang.jmonkey.common.result.HttpResult;
import com.wang.jmonkey.modules.system.model.dto.SystemDictTreeDto;
import com.wang.jmonkey.modules.system.model.entity.SystemDictEntity;
import com.wang.jmonkey.modules.system.model.query.SystemDictQuery;
import com.wang.jmonkey.modules.system.service.SystemDictService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 字典表(SystemDict)表控制层
 *
 * @author HeJiawang
 * @since 2021-05-21 21:44:49
 */
@RestController
@RequestMapping("/dict")
public class SystemDictApi {

    /**
     * 服务对象
     */
    @Autowired
    private SystemDictService service;

    /**
     * 字典信息管理——分页查询
     * @param query 查询条件
     * @return 字典树形数据
     */
    @Log("字典信息管理——分页查询")
    @GetMapping(value = "/page")
    public HttpPageResult<SystemDictTreeDto> page(SystemDictQuery query) {
        return new HttpPageResult<>(service.page(query));
    }

    /**
     * 新增字典信息
     * @param dict 字典信息
     * @return true 新增成功
     */
    @Log("字典信息管理——新增")
    @PostMapping("/save")
    public HttpResult<Void> save(@RequestBody @Validated SystemDictEntity dict) {
        return new HttpResult<Void>().setSuccess(service.save(dict));
    }

    /**
     * 修改字典信息
     * @param dict 字典信息
     * @return true 修改成功
     */
    @Log("字典信息管理——修改")
    @PutMapping("update")
    public HttpResult<Void> update(@RequestBody @Validated SystemDictEntity dict) {
        return new HttpResult<Void>().setSuccess(service.updateById(dict));
    }

    /**
     * 删除字典信息
     * @param id 字典id
     * @return true 删除成功
     */
    @Log("字典信息管理——删除")
    @DeleteMapping("/remove/{id}")
    public HttpResult<Void> remove(@PathVariable Long id) {
        return new HttpResult<Void>().setSuccess(service.removeById(id));
    }

    /**
     * 校验字典键值是否重复 </br>
     * 在同字典信息下（parentId）
     * @param dict 字典信息
     * @return true 重复
     */
    @PostMapping("/checkValue")
    public HttpResult<Void> checkValue(@RequestBody SystemDictEntity dict) {
        return new HttpResult<Void>().setSuccess(service.checkValue(dict));
    }

    /**
     * 获取子集字典信息
     * @param parentValue 父级字典键值
     * @return 字典信息集合
     */
    @GetMapping("/listChildren/{parentValue}")
    public HttpResult<List<SystemDictEntity>> listChildren(@PathVariable String parentValue) {
        return new HttpResult<>(service.listChildren(parentValue));
    }

}
